]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
windowManager: Handle starting/stopping of X11 services
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 15 Aug 2019 11:29:53 +0000 (13:29 +0200)
committerCarlos Garnacho <mrgarnacho@gmail.com>
Thu, 5 Sep 2019 07:42:46 +0000 (07:42 +0000)
We now do 2 things along Xwayland startup/shutdown:
- Start or stop the gnome-session-x11-services target, that will
  pull all X11 related services that the session might depend on.
- As we start ibus-daemon manually, trigger a restart in order to
  toggle the XIM daemon on and off along with Xwayland presence.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/680

js/misc/ibusManager.js
js/ui/windowManager.js

index 6c8266271fa2aa76489268e27850a0db20f94cc3..5677820d3e7768977f91915fef526cd9e37deb55 100644 (file)
@@ -61,7 +61,7 @@ var IBusManager = class {
 
     _spawn(extraArgs = []) {
         try {
-            let cmdLine = ['ibus-daemon', '--panel', 'disable', '--xim', ...extraArgs];
+            let cmdLine = ['ibus-daemon', '--panel', 'disable', ...extraArgs];
             Gio.Subprocess.new(cmdLine, Gio.SubprocessFlags.NONE);
         } catch (e) {
             log(`Failed to launch ibus-daemon: ${e.message}`);
index 346485ffdbae8ee788755f9cfb848704241a7aba..ca9c31fd6085af2f3ae3cf79f9c988e0d93a4ed7 100644 (file)
@@ -17,6 +17,7 @@ const PadOsd = imports.ui.padOsd;
 const EdgeDragAction = imports.ui.edgeDragAction;
 const CloseDialog = imports.ui.closeDialog;
 const SwitchMonitor = imports.ui.switchMonitor;
+const IBusManager = imports.misc.ibusManager;
 
 const { loadInterfaceXML } = imports.misc.fileUtils;
 
@@ -1041,6 +1042,15 @@ var WindowManager = class {
             }
         });
 
+        global.display.connect('x11-display-opened', () => {
+            IBusManager.getIBusManager().restartDaemon(['--xim']);
+            Shell.util_start_systemd_unit('gnome-session-x11-services.target', 'fail');
+        });
+        global.display.connect('x11-display-closing', () => {
+            Shell.util_stop_systemd_unit('gnome-session-x11-services.target', 'fail');
+            IBusManager.getIBusManager().restartDaemon();
+        });
+
         Main.overview.connect('showing', () => {
             for (let i = 0; i < this._dimmedWindows.length; i++)
                 this._undimWindow(this._dimmedWindows[i]);